class RutasController < ApplicationController
  # GET /rutas
  # GET /rutas.xml

  ## Metodo que muestra las recolecciones pendientes para los Recolectores
  def index
    @color
    @contcolor=0
    if session[:type] =="Recolector"
      @rutas= Ruta.find_by_sql("select ru.id, ru.fecha,ru.status ,em.nombre,em.apellido,count(ord.id) as cuenta
              from rutas ru,empleados em, ordens ord where ru.empleado_recolector_id="+session[:empleado_id].to_s+"
              and ru.status='Pendiente' and ru.empleado_despachador_id=em.id and ord.ruta_id=ru.id group by ru.id order by ru.fecha asc")

    else
      @rutas= Ruta.find_by_sql("select ru.id,ru.fecha,ru.status, em.nombre as renombre,em.apellido as reapellido,count(ord.id) as cuenta,
            emp.nombre as denombre,emp.apellido as deapellido from rutas ru,empleados em, ordens ord,empleados emp
            where ru.status='Pendiente' and ru.empleado_recolector_id=em.id and ru.empleado_despachador_id=emp.id and
            ord.ruta_id=ru.id group by ru.id order by ru.fecha asc")
    end
    @rutas.each do |ruta|
      
    end
    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @rutas }
    end
  end

  # GET /rutas/1
  # GET /rutas/1.xml

  #Metodo que muestra los datos y ordenes asignadas a la ruta
  def show
    @ruta = Ruta.find(params[:id])
    @empleados= Empleado.find_by_sql("select em.nombre as renombre,em.apellido as reapellido, emp.nombre as denombre,
        emp.apellido as deapellido from rutas ru,empleados em, empleados emp
        where ru.id= "+@ruta.id.to_s+" and ru.empleado_recolector_id=em.id and ru.empleado_despachador_id=emp.id")

    @direccions= Direccion.find_by_sql("select ord.id,ord.tracking,ord.fechaOrden,ord.status,di.pais,di.ciudad,
        di.urbanizacion,di.latitud, di.longitud
        from ordens ord,direccions di,rutas ru 
        where ord.ruta_id= "+@ruta.id.to_s+" and ord.direccion_id=di.id group by ord.id")
    
    @body_tag = '<body onload="initialize()">'
    @color
    @contcolor=0
    
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @ruta }
    end
  end

  # GET /rutas/new
  # GET /rutas/new.xml

  # Metodo que muestra todas las ordenes Pendientes por Recolectar para ser asignadas a un recolector
  def new
    @ruta = Ruta.new
    @ordens = Orden.all(:conditions => [" status = ?", "Pendiente por Recoleccion" ])
    @contador=Array.new
    @color
    @contcolor=0
    @empleados= Empleado.find_by_sql("SELECT * from empleados where id not in (select em.id
      from ordens ord, empleados em, rutas ru where em.id=ru.empleado_recolector_id and ru.id=ord.ruta_id
      and ord.status = 'Asignada a Recoleccion' GROUP by em.id) and rol='Recolector' ")
      
    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @ruta }
    end
  end

  # GET /rutas/1/edit
  def edit
    @ruta = Ruta.find(params[:id])
  end

  # POST /rutas
  # POST /rutas.xml
  #Metodo que crea la ruta con sus paquetes asignado y le asigna la ruta a un Recolector
  def create
    @ruta = Ruta.new(params[:ruta])
    @empleados= Empleado.find_by_sql("SELECT * from empleados where id not in (select em.id
      from ordens ord, empleados em, rutas ru where em.id=ru.empleado_recolector_id and ru.id=ord.ruta_id
      and ord.status = 'Asignada a Recoleccion' GROUP by em.id) and rol='Recolector' ")
   
    if @ruta.empleado_recolector_id != 0 

    respond_to do |format|
      if @ruta.save
        format.html { redirect_to(@ruta, :notice => 'La Ruta ha sido creada y asignada') }
        format.xml  { render :xml => @ruta, :status => :created, :location => @ruta }
       
        contador = session[:aux]
          
        contador.each do |p|
          if params[:orden.to_s+p.to_s]
            
            @orden= Orden.find(:first, :conditions => [" id = ?", params[:orden.to_s+p.to_s] ])
            @orden.update_attribute('ruta_id', @ruta.id )
            @orden.update_attribute('status', 'Asignada a Recoleccion' )
            etapa= Etapa.new
            etapa.descripcion='Asignada a Recoleccion'
            etapa.fecha= Time.new.strftime("%m/%d/%Y %H:%M:%S")
            etapa.orden_id=@orden.id
            etapa.save
            #             @orden.update_attributes( 'ruta_id' => @ruta.id,'status'=> 'Asignada a Recoleccion')
          end
        end

      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @ruta.errors, :status => :unprocessable_entity }
      end
    end
    else
       
      redirect_to :controller => 'rutas', :action => 'new'
      flash[:notice] = 'Debe seleccionar por lo menos una Orden y un Recolector '

    end
  end

  # PUT /rutas/1
  # PUT /rutas/1.xml
  def update
    @ruta = Ruta.find(params[:id])

    respond_to do |format|
      if @ruta.update_attributes(params[:ruta])
        format.html { redirect_to(@ruta, :notice => 'Ruta was successfully updated.') }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @ruta.errors, :status => :unprocessable_entity }
      end
    end
  end
  #Metodo que se encarga de cambiar el status a las ordenes despues que han sido recolectadas
  def recoleccion
    @orden = Orden.first(:conditions => [" tracking = ? ", params[:tracking]])
   
    if @orden
      if @orden.status != 'Recolectada'
          @orden.update_attribute('status', 'Recolectada' )
          @orden.update_attribute('fechaRecoleccion', Time.new.strftime("%m/%d/%Y %H:%M:%S") )
            etapa= Etapa.new
            etapa.descripcion='Recolectada'
            etapa.fecha= Time.new.strftime("%m/%d/%Y %H:%M:%S")
            etapa.orden_id=@orden.id
            etapa.save
          flash[:notice] = 'Cambiado el Status a Recolectado de la Orden Numero: '+@orden.tracking.to_s+' '
          @ordens = Orden.first(:conditions => [ 'ruta_id=? and status =?', @orden.ruta_id, 'Asignada a Recoleccion'] )
          if @ordens
            flash[:notice] = 'Cambiado el Status a Recolectado de la Orden Numero: '+@orden.tracking.to_s+' '
          else
            @ruta = Ruta.first(:conditions => [" id = ? ", @orden.ruta_id])
            @ruta.update_attribute('status', 'Recolectada' )
          end

      else
        flash[:notice] = 'Disculpe, la orden ya habia sido Recolectada'
      end

    else
      flash[:notice] = 'Disculpe, numero de tracking no exite o es incorrecto'
    end
    redirect_to :controller => 'rutas', :action => 'index'
  end

  # DELETE /rutas/1
  # DELETE /rutas/1.xml
  def destroy
    @ruta = Ruta.find(params[:id])
    @ruta.destroy

    respond_to do |format|
      format.html { redirect_to(rutas_url) }
      format.xml  { head :ok }
    end
  end
end
